import java.util.Arrays;

/**
 * 选择排序
 * 1.[0, len - 1] 区间内，选择第 1 小的元素，与索引 0 上的元素交换
 * 2.[1, len - 1] 区间内，选择第 2 小的元素，与索引 1 上的元素交换
 * 3.[2, len - 1] 区间内，选择第 3 小的元素，与索引 2 上的元素交换
 * 4.直至排序完成
 *
 * 缺点：时间复杂度高，平均：O(n^2)
 */
public class SelectionSort {
    public static int[] selectionSort(int[] nums) {
        int[] res = Arrays.copyOf(nums, nums.length);

        int len = res.length;
        for (int i = 0; i < len; i++) {
            // min：记录 [i, len - 1] 区间内，最小值的索引
            int min = i;
            for (int j = i + 1; j < len; j++) {
                // 循环找到最小值
                if (res[j] < res[min]) {
                    min = j;
                }
            }
            // 最小值放置到索引 i 上
            if (min != i) {
                // 交换
                int temp = res[i];
                res[i] = res[min];
                res[min] = temp;
            }
        }
        return res;
    }
}
